ARIA ์ญํ , ํค๋ณด๋ ํ์, ๋ชจ๋ฒ ์ฌ๋ก, ๊ต์ฐจ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋ค๋ฃจ๋ ํธ๋ฆฌ ๋ทฐ ์ ๊ทผ์ฑ์ ๋ํ ์ข ํฉ ๊ฐ์ด๋๋ก ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
ํธ๋ฆฌ ๋ทฐ: ๊ณ์ธต์ ๋ฐ์ดํฐ ํ์ ์ ๊ทผ์ฑ
ํธ๋ฆฌ ๋ทฐ๋ ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ ์ํ ํ์์ ์ธ UI ์ปดํฌ๋ํธ์ ๋๋ค. ์ฌ์ฉ์๋ ํ์ผ ์์คํ , ์กฐ์ง๋, ์น์ฌ์ดํธ ๋ฉ๋ด์ ๊ฐ์ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ์ง๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ํ์ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์๋ชป ๊ตฌํ๋ ํธ๋ฆฌ ๋ทฐ๋ ํนํ ์คํฌ๋ฆฐ ๋ฆฌ๋๋ ํค๋ณด๋ ํ์๊ณผ ๊ฐ์ ๋ณด์กฐ ๊ธฐ์ ์ ์์กดํ๋ ์ฅ์ ์ธ ์ฌ์ฉ์์๊ฒ ์ฌ๊ฐํ ์ ๊ทผ์ฑ ์ฅ๋ฒฝ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ๊ธ์ ๋ชจ๋์๊ฒ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋, ์ ๊ทผ์ฑ ์๋ ํธ๋ฆฌ ๋ทฐ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ๊ธฐ ์ํ ์ข ํฉ์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํธ๋ฆฌ ๋ทฐ ๊ตฌ์กฐ ์ดํดํ๊ธฐ
ํธ๋ฆฌ ๋ทฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ธต์ ์ด๊ณ ํ์ฅ/์ถ์๊ฐ ๊ฐ๋ฅํ ํ์์ผ๋ก ์ ๊ณตํฉ๋๋ค. ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐ์ง์ ํ์ ๊ฐ์ง๋ฅผ ๋ง๋ญ๋๋ค. ๊ฐ์ฅ ์์ ๋ ธ๋๋ ๋ฃจํธ ๋ ธ๋๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ์ ๊ทผ์ฑ ๊ณ ๋ ค ์ฌํญ์ ์ดํด๋ณด๊ธฐ ์ ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ํธ๋ฆฌ ๋ทฐ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํธ๋ฆฌ(Tree): ์ ์ฒด ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ด๋ ์ ์ฒด ์ปจํ ์ด๋ ์์์ ๋๋ค.
- ํธ๋ฆฌ์์ดํ (Treeitem): ํธ๋ฆฌ์ ๋จ์ผ ๋ ธ๋๋ฅผ ๋ํ๋ ๋๋ค. ๊ฐ์ง(ํ์ฅ/์ถ์ ๊ฐ๋ฅ) ๋๋ ์(์์ ์์)์ด ๋ ์ ์์ต๋๋ค.
- ๊ทธ๋ฃน(Group): (์ ํ ์ฌํญ) ๋ถ๋ชจ ํธ๋ฆฌ์์ดํ ๋ด์์ ์์ ํธ๋ฆฌ์์ดํ ๋ค์ ์๊ฐ์ ์ผ๋ก ๊ทธ๋ฃนํํ๋ ์ปจํ ์ด๋์ ๋๋ค.
- ํ ๊ธ๋ฌ/๊ณต๊ฐ ์์ด์ฝ: ์ฌ์ฉ์๊ฐ ๊ฐ์ง๋ฅผ ํ์ฅํ๊ฑฐ๋ ์ถ์ํ ์ ์๊ฒ ํ๋ ์๊ฐ์ ํ์๊ธฐ(์: ๋ํ๊ธฐ ๋๋ ๋นผ๊ธฐ ๊ธฐํธ, ํ์ดํ)์ ๋๋ค.
- ๋ ์ด๋ธ(Label): ๊ฐ ํธ๋ฆฌ์์ดํ ์ ํ์๋๋ ํ ์คํธ์ ๋๋ค.
ARIA ์ญํ ๋ฐ ์์ฑ์ ์ค์์ฑ
ARIA(Accessible Rich Internet Applications)๋ HTML ์์์ ์๋ฏธ๋ก ์ ์๋ฏธ๋ฅผ ์ถ๊ฐํ์ฌ ๋ณด์กฐ ๊ธฐ์ ์ด ์ดํดํ ์ ์๋๋ก ๋ง๋๋ ์์ฑ ๋ชจ์์ ๋๋ค. ํธ๋ฆฌ ๋ทฐ๋ฅผ ๊ตฌ์ถํ ๋, ARIA ์ญํ ๊ณผ ์์ฑ์ ํธ๋ฆฌ์ ๊ตฌ์กฐ์ ๋์์ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์ ๋ฌํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
ํ์ ARIA ์ญํ :
role="tree"
: ์ ์ฒด ํธ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ์ปจํ ์ด๋ ์์์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ณด์กฐ ๊ธฐ์ ์ ํด๋น ์์๊ฐ ๊ณ์ธต์ ๋ชฉ๋ก์ ํฌํจํ๊ณ ์์์ ์๋ฆฝ๋๋ค.role="treeitem"
: ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ฐ ๋ ธ๋๋ฅผ ํธ๋ฆฌ ๋ด์ ์์ดํ ์ผ๋ก ์๋ณํฉ๋๋ค.role="group"
: ์์ ํธ๋ฆฌ์์ดํ ์ ์๊ฐ์ ์ผ๋ก ๊ทธ๋ฃนํํ๋ ์ปจํ ์ด๋ ์์์ ์ ์ฉ๋ฉ๋๋ค. ํญ์ ํ์ํ ๊ฒ์ ์๋์ง๋ง, ์๋ฏธ๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค.
์ฃผ์ ARIA ์์ฑ:
aria-expanded="true|false"
: ์์์ด ์๋ ํธ๋ฆฌ์์ดํ ์ ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ง๊ฐ ํ์ฌ ํ์ฅ๋์๋์ง(true
) ๋๋ ์ถ์๋์๋์ง(false
)๋ฅผ ๋ํ๋ ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ ธ๋๋ฅผ ํ์ฅํ๊ฑฐ๋ ์ถ์ํ ๋ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์ฑ์ ๋์ ์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.aria-selected="true|false"
: ๋ ธ๋๊ฐ ํ์ฌ ์ ํ๋์๋์ง๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ํธ๋ฆฌ์์ดํ ์ ์ ์ฉ๋ฉ๋๋ค. ํ ๋ฒ์ ํ๋์ ๋ ธ๋๋ง ์ ํ๋์ด์ผ ํฉ๋๋ค (์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ค ์ ํ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ,role="tree"
์์์aria-multiselectable="true"
๋ฅผ ์ฌ์ฉ).aria-label="[๋ ์ด๋ธ ํ ์คํธ]"
๋๋aria-labelledby="[๋ ์ด๋ธ ์์์ ID]"
: ํธ๋ฆฌ ๋๋ ๊ฐ๋ณ ํธ๋ฆฌ์์ดํ ์ ๋ํ ์ค๋ช ์ ์ธ ๋ ์ด๋ธ์ ์ ๊ณตํฉ๋๋ค. ๋ ์ด๋ธ์ด ์๊ฐ์ ์ผ๋ก ํ์๋์ง ์๋ ๊ฒฝ์ฐaria-label
์ ์ฌ์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐaria-labelledby
๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์์ดํ ์ ์๊ฐ์ ๋ ์ด๋ธ๊ณผ ์ฐ๊ฒฐํฉ๋๋ค.tabindex="0"
: ์ด๊ธฐ์ ํฌ์ปค์ค๋ ํธ๋ฆฌ์์ดํ (๋ณดํต ์ฒซ ๋ฒ์งธ ์์ดํ )์ ์ ์ฉ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํธ๋ฆฌ์์ดํ ์๋ ํฌ์ปค์ค๋ ๋๊น์ง(์: ํค๋ณด๋ ํ์์ ํตํด)tabindex="-1"
์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ ์ ํ ํค๋ณด๋ ํ์ ํ๋ฆ์ ๋ณด์ฅํฉ๋๋ค.
ARIA ๊ตฌํ ์์:
๋ค์์ ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์์ ๋๋ค:
<ul role="tree" aria-label="ํ์ผ ์์คํ
">
<li role="treeitem" aria-expanded="true" aria-selected="false" tabindex="0">
<span>๋ฃจํธ ํด๋</span>
<ul role="group">
<li role="treeitem" aria-expanded="false" aria-selected="false" tabindex="-1">
<span>ํด๋ 1</span>
<ul role="group">
<li role="treeitem" aria-selected="false" tabindex="-1"><span>ํ์ผ 1.txt</span></li>
<li role="treeitem" aria-selected="false" tabindex="-1"><span>ํ์ผ 2.txt</span></li>
</ul>
</li>
<li role="treeitem" aria-selected="false" tabindex="-1"><span>ํด๋ 2</span></li>
</ul>
</li>
</ul>
ํค๋ณด๋ ํ์
ํค๋ณด๋ ํ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ ์ค๊ณ๋ ํธ๋ฆฌ ๋ทฐ๋ ํค๋ณด๋๋ง์ผ๋ก ์์ ํ ํ์ํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ค์์ ํ์ค์ ์ธ ํค๋ณด๋ ์ํธ ์์ฉ์ ๋๋ค:
- ์์ชฝ ํ์ดํ: ํธ๋ฆฌ์์ ์ด์ ๋ ธ๋๋ก ํฌ์ปค์ค๋ฅผ ์ด๋ํฉ๋๋ค.
- ์๋์ชฝ ํ์ดํ: ํธ๋ฆฌ์์ ๋ค์ ๋ ธ๋๋ก ํฌ์ปค์ค๋ฅผ ์ด๋ํฉ๋๋ค.
- ์ผ์ชฝ ํ์ดํ:
- ๋ ธ๋๊ฐ ํ์ฅ๋ ๊ฒฝ์ฐ, ๋ ธ๋๋ฅผ ์ถ์ํฉ๋๋ค.
- ๋ ธ๋๊ฐ ์ถ์๋์๊ฑฐ๋ ์์์ด ์๋ ๊ฒฝ์ฐ, ๋ ธ๋์ ๋ถ๋ชจ๋ก ํฌ์ปค์ค๋ฅผ ์ด๋ํฉ๋๋ค.
- ์ค๋ฅธ์ชฝ ํ์ดํ:
- ๋ ธ๋๊ฐ ์ถ์๋ ๊ฒฝ์ฐ, ๋ ธ๋๋ฅผ ํ์ฅํฉ๋๋ค.
- ๋ ธ๋๊ฐ ํ์ฅ๋ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ํฌ์ปค์ค๋ฅผ ์ด๋ํฉ๋๋ค.
- Home: ํธ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ก ํฌ์ปค์ค๋ฅผ ์ด๋ํฉ๋๋ค.
- End: ํธ๋ฆฌ์ ๋ง์ง๋ง์ผ๋ก ๋ณด์ด๋ ๋ ธ๋๋ก ํฌ์ปค์ค๋ฅผ ์ด๋ํฉ๋๋ค.
- ์คํ์ด์ค๋ฐ ๋๋ Enter: ํฌ์ปค์ค๋ ๋ ธ๋๋ฅผ ์ ํํฉ๋๋ค (์ ํ์ด ์ง์๋๋ ๊ฒฝ์ฐ).
- ๋ฌธ์ ๋๋ ์ซ์ ์ ๋ ฅ: ์ ๋ ฅ๋ ๋ฌธ์๋ก ์์ํ๋ ๋ค์ ๋ ธ๋๋ก ํฌ์ปค์ค๋ฅผ ์ด๋ํฉ๋๋ค. ์ดํ ํค ์ ๋ ฅ๋ง๋ค ๊ฒ์์ ๊ณ์ํฉ๋๋ค.
- ๋ํ๊ธฐ (+): ํ์ฌ ํฌ์ปค์ค๋ ๋ ธ๋๋ฅผ ํ์ฅํฉ๋๋ค (์ถ์๋ ์ํ์์ ์ค๋ฅธ์ชฝ ํ์ดํ์ ๋์ผ).
- ๋นผ๊ธฐ (-): ํ์ฌ ํฌ์ปค์ค๋ ๋ ธ๋๋ฅผ ์ถ์ํฉ๋๋ค (ํ์ฅ๋ ์ํ์์ ์ผ์ชฝ ํ์ดํ์ ๋์ผ).
- ๋ณํ (*): ํ์ฌ ๋ ๋ฒจ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ฅํฉ๋๋ค (๋ณดํธ์ ์ผ๋ก ์ง์๋์ง๋ ์์ง๋ง ์ข ์ข ์ ์ฉํจ).
ํค๋ณด๋ ํ์์ ์ํ JavaScript ๊ตฌํ:
ํค๋ณด๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ทธ์ ๋ฐ๋ผ ํฌ์ปค์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด JavaScript๊ฐ ํ์ํฉ๋๋ค. ๋ค์์ ๊ฐ์ํ๋ ์์์ ๋๋ค:
const tree = document.querySelector('[role="tree"]');
const treeitems = document.querySelectorAll('[role="treeitem"]');
tree.addEventListener('keydown', (event) => {
const focusedElement = document.activeElement;
let nextElement;
switch (event.key) {
case 'ArrowUp':
event.preventDefault(); // ํ์ด์ง ์คํฌ๋กค ๋ฐฉ์ง
// ์ด์ ํธ๋ฆฌ์์ดํ
์ ์ฐพ๋ ๋ก์ง (DOM ์ํ ํ์)
// ...
nextElement = findPreviousTreeitem(focusedElement);
break;
case 'ArrowDown':
event.preventDefault();
// ๋ค์ ํธ๋ฆฌ์์ดํ
์ ์ฐพ๋ ๋ก์ง
// ...
nextElement = findNextTreeitem(focusedElement);
break;
case 'ArrowLeft':
event.preventDefault();
if (focusedElement.getAttribute('aria-expanded') === 'true') {
// ๋
ธ๋ ์ถ์
focusedElement.setAttribute('aria-expanded', 'false');
} else {
// ๋ถ๋ชจ๋ก ํฌ์ปค์ค ์ด๋
nextElement = findParentTreeitem(focusedElement);
}
break;
case 'ArrowRight':
event.preventDefault();
if (focusedElement.getAttribute('aria-expanded') === 'false') {
// ๋
ธ๋ ํ์ฅ
focusedElement.setAttribute('aria-expanded', 'true');
} else {
// ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ํฌ์ปค์ค ์ด๋
nextElement = findFirstChildTreeitem(focusedElement);
}
break;
case 'Home':
event.preventDefault();
nextElement = treeitems[0];
break;
case 'End':
event.preventDefault();
nextElement = treeitems[treeitems.length - 1];
break;
case ' ': // ์คํ์ด์ค๋ฐ
case 'Enter':
event.preventDefault();
// ํฌ์ปค์ค๋ ๋
ธ๋๋ฅผ ์ ํํ๋ ๋ก์ง
selectNode(focusedElement);
break;
default:
// ํด๋น ๋ฌธ์๋ก ์์ํ๋ ๋
ธ๋๋ก ์ด๋ํ๊ธฐ ์ํ ๋ฌธ์ ์
๋ ฅ ์ฒ๋ฆฌ
break;
}
if (nextElement) {
focusedElement.setAttribute('tabindex', '-1');
nextElement.setAttribute('tabindex', '0');
nextElement.focus();
}
});
ํค๋ณด๋ ํ์ ๊ตฌํ ์ ์ค์ ๊ณ ๋ ค ์ฌํญ:
- ํฌ์ปค์ค ๊ด๋ฆฌ: ํญ์ ํ๋์ ํธ๋ฆฌ์์ดํ
๋ง
tabindex="0"
์ ๊ฐ๋๋ก ํด์ผ ํฉ๋๋ค. ํฌ์ปค์ค๋ฅผ ์ด๋ํ ๋tabindex
์์ฑ์ ์ ์ ํ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. - DOM ์ํ: ๋ค์ ๋ฐ ์ด์ ํธ๋ฆฌ์์ดํ , ๋ถ๋ชจ ๋ ธ๋, ์์ ๋ ธ๋๋ฅผ ์ฐพ๊ธฐ ์ํด DOM์ ํจ์จ์ ์ผ๋ก ์ํํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋จ์ํํ๊ธฐ ์ํด ์ ํธ๋ฆฌํฐ ํจ์ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ด๋ฒคํธ ๋ฐฉ์ง: ํ์ดํ ํค๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ ๋์(์: ์คํฌ๋กค)์ ์ํํ์ง ๋ชปํ๋๋ก
event.preventDefault()
๋ฅผ ์ฌ์ฉํ์ญ์์ค. - ๋ฌธ์ ์ ๋ ฅ: ์ฌ์ฉ์๊ฐ ํน์ ๋ฌธ์๋ก ์์ํ๋ ๋ ธ๋๋ก ๋น ๋ฅด๊ฒ ์ด๋ํ ์ ์๋๋ก ๋ฌธ์ ์ ๋ ฅ ์ฒ๋ฆฌ ๋ก์ง์ ๊ตฌํํ์ญ์์ค. ๊ฒ์ ๋ฌธ์์ด์ ์ธ์ ์ง์์ผ ํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ง์ง๋ง ํค ๋๋ฆ ์๊ฐ์ ์ ์ฅํ์ญ์์ค.
์๊ฐ์ ๋์์ธ๊ณผ ์ ๊ทผ์ฑ
์๊ฐ์ ๋์์ธ์ ํธ๋ฆฌ ๋ทฐ์ ์ฌ์ฉ์ฑ๊ณผ ์ ๊ทผ์ฑ์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๊ฐ์ด๋๋ผ์ธ์ ๋๋ค:
- ๋ช ํํ ์๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ: ๋ค์ฌ์ฐ๊ธฐ์ ์๊ฐ์ ๋จ์(์: ํด๋์ ํ์ผ์ ๋ํ ๋ค๋ฅธ ์์ด์ฝ)๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ํ์ํ์ญ์์ค.
- ์ถฉ๋ถํ ์์ ๋๋น: ํ ์คํธ์ ๋ฐฐ๊ฒฝ, ๊ทธ๋ฆฌ๊ณ ํธ๋ฆฌ ๋ทฐ์ ๋ค๋ฅธ ์์๋ค ๊ฐ์ ์ถฉ๋ถํ ์์ ๋๋น๋ฅผ ๋ณด์ฅํ์ญ์์ค. WebAIM ๋๋น ๊ฒ์ฌ๊ธฐ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋น ๋น์จ์ ํ์ธํ์ญ์์ค.
- ํฌ์ปค์ค ํ์: ํ์ฌ ํฌ์ปค์ค๋ ํธ๋ฆฌ์์ดํ ์ ๋ํด ๋ช ํํ๊ณ ๊ฐ์์ ์ธ ํฌ์ปค์ค ํ์๊ธฐ๋ฅผ ์ ๊ณตํ์ญ์์ค. ์ด๋ ํค๋ณด๋ ์ฌ์ฉ์์๊ฒ ํ์์ ์ ๋๋ค. ์์์๋ง ์์กดํ์ง ๋ง๊ณ ํ ๋๋ฆฌ, ์ธ๊ณฝ์ ๋๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ํ์ฅ/์ถ์ ํ์๊ธฐ: ํ์ฅ/์ถ์ ํ์๊ธฐ(์: ๋ํ๊ธฐ/๋นผ๊ธฐ ๊ธฐํธ, ํ์ดํ)์ ๋ํด ๋ช ํํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์์ด์ฝ์ ์ฌ์ฉํ์ญ์์ค. ์ด๋ฌํ ์์ด์ฝ์ ์ถฉ๋ถํ ๋๋น๋ฅผ ๊ฐ์ง๋ฉฐ ์ฝ๊ฒ ํด๋ฆญํ ์ ์์ ๋งํผ ์ปค์ผ ํฉ๋๋ค.
- ์ ๋ณด ์ ๋ฌ์ ์ํด ์์๋ง ์ฌ์ฉํ์ง ์๊ธฐ: ํธ๋ฆฌ ์์ดํ ์ ์ํ(์: ์ ํ๋จ, ํ์ฅ๋จ, ์ค๋ฅ)๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์์์๋ง ์์กดํ์ง ๋ง์ญ์์ค. ํ ์คํธ ๋ ์ด๋ธ์ด๋ ์์ด์ฝ๊ณผ ๊ฐ์ ๋์์ ์ธ ์๊ฐ์ ๋จ์๋ฅผ ์ ๊ณตํ์ญ์์ค.
์คํฌ๋ฆฐ ๋ฆฌ๋ ๊ณ ๋ ค ์ฌํญ
์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๋ ํธ๋ฆฌ ๋ทฐ๋ฅผ ์ดํดํ๊ณ ์ํธ ์์ฉํ๊ธฐ ์ํด ARIA ์์ฑ๊ณผ ํค๋ณด๋ ํ์์ ์์กดํฉ๋๋ค. ๋ค์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ ๊ทผ์ฑ์ ๋ํ ๋ช ๊ฐ์ง ์ฃผ์ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค:
- ์ค๋ช
์ ์ธ ๋ ์ด๋ธ:
aria-label
๋๋aria-labelledby
๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ๊ฐ๋ณ ํธ๋ฆฌ์์ดํ ์ ์ค๋ช ์ ์ธ ๋ ์ด๋ธ์ ์ ๊ณตํ์ญ์์ค. ์ด๋ฌํ ๋ ์ด๋ธ์ ๊ฐ๊ฒฐํ๊ณ ์ ์ตํด์ผ ํฉ๋๋ค. - ์ํ ์๋ฆผ: ์ํ ๋ณ๊ฒฝ(์: ๋
ธ๋ ํ์ฅ/์ถ์, ๋
ธ๋ ์ ํ)์ด ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์ํด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ ค์ง๋์ง ํ์ธํ์ญ์์ค. ์ด๋
aria-expanded
๋ฐaria-selected
์์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฐ์ดํธํจ์ผ๋ก์จ ๋ฌ์ฑ๋ฉ๋๋ค. - ๊ณ์ธต ๊ตฌ์กฐ ์๋ฆผ: ์คํฌ๋ฆฐ ๋ฆฌ๋๋ ๊ณ์ธต ๊ตฌ์กฐ์์ ๊ฐ ๋ ธ๋์ ๋ ๋ฒจ์ ์๋ ค์ผ ํฉ๋๋ค(์: "๋ ๋ฒจ 2, ํด๋ 1"). ์ด๋ ARIA ์ญํ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ ๋ ๋๋ถ๋ถ์ ์คํฌ๋ฆฐ ๋ฆฌ๋์์ ์๋์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ํค๋ณด๋ ํ์ ์ผ๊ด์ฑ: ํค๋ณด๋ ํ์์ด ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋ฆฐ ๋ฆฌ๋์์ ์ผ๊ด๋๊ณ ์์ธก ๊ฐ๋ฅํ๋๋ก ํ์ญ์์ค. ์ฌ๋ฌ ์คํฌ๋ฆฐ ๋ฆฌ๋(์: NVDA, JAWS, VoiceOver)๋ก ํธ๋ฆฌ ๋ทฐ๋ฅผ ํ ์คํธํ์ฌ ๋ถ์ผ์น์ ์ ์ฐพ์ ํด๊ฒฐํ์ญ์์ค.
- ์ ์ง์ ํฅ์: JavaScript๊ฐ ๋นํ์ฑํ๋ ๊ฒฝ์ฐ์๋ ํธ๋ฆฌ ๋ทฐ๋ ๋น๋ก ๊ธฐ๋ฅ์ด ์ ํ๋ ์ํ์ผ์ง๋ผ๋ ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. JavaScript ์์ด๋ ๊ธฐ๋ณธ์ ์ธ ์์ค์ ์ ๊ทผ์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด ์๋ฏธ๋ก ์ HTML(์: ์ค์ฒฉ ๋ชฉ๋ก) ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
๊ต์ฐจ ๋ธ๋ผ์ฐ์ ํธํ์ฑ
์ ๊ทผ์ฑ์ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ์ด์ ์ฒด์ ์์ ์ผ๊ด๋์ด์ผ ํฉ๋๋ค. ๋ค์ ํ๊ฒฝ์์ ํธ๋ฆฌ ๋ทฐ๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค:
- ๋ฐ์คํฌํฑ ๋ธ๋ผ์ฐ์ : Chrome, Firefox, Safari, Edge
- ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ : Chrome (Android ๋ฐ iOS), Safari (iOS)
- ์ด์ ์ฒด์ : Windows, macOS, Linux, Android, iOS
- ์คํฌ๋ฆฐ ๋ฆฌ๋: NVDA (Windows), JAWS (Windows), VoiceOver (macOS ๋ฐ iOS)
๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ARIA ์์ฑ๊ณผ ํค๋ณด๋ ๋์์ ๊ฒ์ฌํ์ญ์์ค. ๋ถ์ผ์น๋ ๋ ๋๋ง ๋ฌธ์ ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค.
ํ ์คํธ ๋ฐ ๊ฒ์ฆ
์ ๊ธฐ์ ์ธ ํ ์คํธ๋ ํธ๋ฆฌ ๋ทฐ์ ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ํ ์คํธ ๋ฐฉ๋ฒ์ ๋๋ค:
- ์๋ ํ ์คํธ: ์คํฌ๋ฆฐ ๋ฆฌ๋์ ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ทฐ๋ฅผ ํ์ํ๊ณ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํ์ญ์์ค.
- ์๋ํ๋ ํ ์คํธ: ์ ๊ทผ์ฑ ํ ์คํธ ๋๊ตฌ(์: axe DevTools, WAVE)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ์ ๊ทผ์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ์ญ์์ค.
- ์ฌ์ฉ์ ํ ์คํธ: ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ํ ์คํธ ๊ณผ์ ์ ์ฐธ์ฌ์์ผ ํธ๋ฆฌ ๋ทฐ์ ์ ๊ทผ์ฑ์ ๋ํ ์ค์ ํผ๋๋ฐฑ์ ์ป์ผ์ญ์์ค.
- WCAG ์ค์: ์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ(WCAG) 2.1 ๋ ๋ฒจ AA๋ฅผ ์ถฉ์กฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ญ์์ค. WCAG๋ ์น ์ฝํ ์ธ ๋ฅผ ๋ ์ ๊ทผ์ฑ ์๊ฒ ๋ง๋ค๊ธฐ ์ํ ๊ตญ์ ์ ์ผ๋ก ์ธ์ ๋ ๊ฐ์ด๋๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค.
์ ๊ทผ์ฑ ์๋ ํธ๋ฆฌ ๋ทฐ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ ๊ทผ์ฑ ์๋ ํธ๋ฆฌ ๋ทฐ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ ๋ ๋ฐ๋ผ์ผ ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์๋ฏธ๋ก ์ HTML๋ก ์์ํ๊ธฐ: ์๋ฏธ๋ก ์ HTML ์์(์:
<ul>
,<li>
)๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ทฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ง๋์ญ์์ค. - ARIA ์ญํ ๋ฐ ์์ฑ ์ ์ฉํ๊ธฐ: ARIA ์ญํ ๊ณผ ์์ฑ์ ์ฌ์ฉํ์ฌ ์๋ฏธ๋ก ์ ์๋ฏธ๋ฅผ ์ถ๊ฐํ๊ณ ๋ณด์กฐ ๊ธฐ์ ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ญ์์ค.
- ๊ฒฌ๊ณ ํ ํค๋ณด๋ ํ์ ๊ตฌํํ๊ธฐ: ํธ๋ฆฌ ๋ทฐ๊ฐ ํค๋ณด๋๋ง์ผ๋ก ์์ ํ ํ์ ๊ฐ๋ฅํ์ง ํ์ธํ์ญ์์ค.
- ๋ช ํํ ์๊ฐ์ ๋จ์ ์ ๊ณตํ๊ธฐ: ์๊ฐ์ ๋์์ธ์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ๊ณ์ธต ๊ตฌ์กฐ, ์ํ ๋ฐ ํฌ์ปค์ค๋ฅผ ๋ช ํํ๊ฒ ํ์ํ์ญ์์ค.
- ์คํฌ๋ฆฐ ๋ฆฌ๋๋ก ํ ์คํธํ๊ธฐ: ์ฌ๋ฌ ์คํฌ๋ฆฐ ๋ฆฌ๋๋ก ํธ๋ฆฌ ๋ทฐ๋ฅผ ํ ์คํธํ์ฌ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํ์ญ์์ค.
- WCAG ์ค์ ๊ฒ์ฆํ๊ธฐ: WCAG ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ผ ํธ๋ฆฌ ๋ทฐ๋ฅผ ๊ฒ์ฆํ์ฌ ์ ๊ทผ์ฑ ํ์ค์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ญ์์ค.
- ์ฝ๋ ๋ฌธ์ํํ๊ธฐ: ๊ฐ ARIA ์์ฑ๊ณผ ํค๋ณด๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋ชฉ์ ์ ์ค๋ช ํ์ฌ ์ฝ๋๋ฅผ ๋ช ํํ๊ฒ ๋ฌธ์ํํ์ญ์์ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ๋ ์์ํฌ ์ฌ์ฉ (์ฃผ์): ์ ๋ขฐํ ์ ์๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ์ ์ฌ์ ๊ตฌ์ถ๋ ํธ๋ฆฌ ๋ทฐ ์ปดํฌ๋ํธ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ปดํฌ๋ํธ์ ์ ๊ทผ์ฑ ๊ธฐ๋ฅ์ ์ ์คํ๊ฒ ๊ฒํ ํ๊ณ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ญ์์ค. ํญ์ ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค!
๊ณ ๊ธ ๊ณ ๋ ค ์ฌํญ
- ์ง์ฐ ๋ก๋ฉ(Lazy Loading): ๋งค์ฐ ํฐ ํธ๋ฆฌ์ ๊ฒฝ์ฐ, ๋ ธ๋๊ฐ ํ์ํ ๋๋ง ๋ก๋ํ๋๋ก ์ง์ฐ ๋ก๋ฉ์ ๊ตฌํํ์ญ์์ค. ์ด๋ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. ์ง์ฐ ๋ก๋ฉ์ด ์ ๊ทผ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์๋์ง ํ์ธํ๊ณ , ๋ ธ๋๊ฐ ๋ก๋๋๋ ๋์ ์ฌ์ฉ์์๊ฒ ์ ์ ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ญ์์ค. ARIA ๋ผ์ด๋ธ ๋ฆฌ์ ์ ์ฌ์ฉํ์ฌ ๋ก๋ฉ ์ํ๋ฅผ ์๋ฆฌ์ญ์์ค.
- ๋๋๊ทธ ์ค ๋๋กญ: ํธ๋ฆฌ ๋ทฐ๊ฐ ๋๋๊ทธ ์ค ๋๋กญ ๊ธฐ๋ฅ์ ์ง์ํ๋ ๊ฒฝ์ฐ, ํค๋ณด๋ ์ฌ์ฉ์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๋ ์ ๊ทผํ ์ ์๋๋ก ํ์ญ์์ค. ๋ ธ๋๋ฅผ ๋๋๊ทธ ์ค ๋๋กญํ๊ธฐ ์ํ ๋์ฒด ํค๋ณด๋ ๋ช ๋ น์ ์ ๊ณตํ์ญ์์ค.
- ์ปจํ ์คํธ ๋ฉ๋ด: ํธ๋ฆฌ ๋ทฐ์ ์ปจํ ์คํธ ๋ฉ๋ด๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ํค๋ณด๋ ์ฌ์ฉ์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๋ ์ ๊ทผํ ์ ์๋๋ก ํ์ญ์์ค. ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ์ปจํ ์คํธ ๋ฉ๋ด์ ๊ทธ ์ต์ ์ ์๋ณํ์ญ์์ค.
- ์ธ๊ณํ ๋ฐ ํ์งํ: ๋ค๋ฅธ ์ธ์ด์ ๋ฌธํ์ ๋ง๊ฒ ํธ๋ฆฌ ๋ทฐ๋ฅผ ์ฝ๊ฒ ํ์งํํ ์ ์๋๋ก ์ค๊ณํ์ญ์์ค. ๋ค๋ฅธ ํ ์คํธ ๋ฐฉํฅ(์: ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ)์ด ์๊ฐ์ ๋ ์ด์์๊ณผ ํค๋ณด๋ ํ์์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํ์ญ์์ค.
๊ฒฐ๋ก
์ ๊ทผ์ฑ ์๋ ํธ๋ฆฌ ๋ทฐ๋ฅผ ๋ง๋๋ ๋ฐ๋ ์ ์คํ ๊ณํ๊ณผ ๊ตฌํ์ด ํ์ํฉ๋๋ค. ์ด ๊ธ์์ ์ค๋ช ํ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ฅด๋ฉด, ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ํฌํจํ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ํธ๋ฆฌ ๋ทฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ ๊ทผ์ฑ์ ๋จ์ง ๊ธฐ์ ์ ์ธ ์๊ตฌ ์ฌํญ์ด ์๋๋ผ, ํฌ์ฉ์ ๋์์ธ์ ๊ธฐ๋ณธ ์์น์์ ๊ธฐ์ตํ์ญ์์ค.
์ ๊ทผ์ฑ์ ์ฐ์ ์ํจ์ผ๋ก์จ, ๋ฅ๋ ฅ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ๋์๊ฒ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธํ๊ณ ๊ฒ์ฆํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ง์ ์ผ๋ก ํฌ์ฉ์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ต์ ์ ๊ทผ์ฑ ํ์ค๊ณผ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ์ ๋ฐ์ดํธํ์ญ์์ค.